/**
 * 日志工具类
 * 提供统一的日志记录接口，支持不同级别和模块
 */

export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'fatal'

export interface LogData {
  [key: string]: unknown
}

class Logger {
  private module: string
  private enabled: boolean = true

  constructor(module: string) {
    this.module = module
  }

  /**
   * 设置日志是否启用
   */
  setEnabled(enabled: boolean): void {
    this.enabled = enabled
  }

  /**
   * 记录日志
   */
  private async log(level: LogLevel, message: string, data?: LogData): Promise<void> {
    if (!this.enabled) return

    // Debug 级别只在开发环境输出到控制台，不发送到后端
    if (level === 'debug') {
      if (import.meta.env.DEV) {
        console.debug(`[${this.module}] ${message}`, data || '')
      }
      return
    }

    // 控制台输出（开发环境）
    if (import.meta.env.DEV) {
      const consoleMethod = level === 'error' || level === 'fatal' ? 'error' : 
                           level === 'warn' ? 'warn' : 'log'
      console[consoleMethod](`[${this.module}] ${message}`, data || '')
    }

    // 发送到后端（Info、Warn、Error、Fatal）
    try {
      const app = window.go?.main?.App
      if (app?.WriteLog) {
        await app.WriteLog(level, this.module, message, data || {})
      }
    } catch (error) {
      // 如果后端不可用，只输出到控制台
      console.error('日志发送失败:', error)
    }
  }

  /**
   * Debug 级别日志
   */
  debug(message: string, data?: LogData): void {
    this.log('debug', message, data).catch(() => {})
  }

  /**
   * Info 级别日志
   */
  info(message: string, data?: LogData): void {
    this.log('info', message, data).catch(() => {})
  }

  /**
   * Warn 级别日志
   */
  warn(message: string, data?: LogData): void {
    this.log('warn', message, data).catch(() => {})
  }

  /**
   * Error 级别日志
   */
  error(message: string, data?: LogData): void {
    this.log('error', message, data).catch(() => {})
  }

  /**
   * Fatal 级别日志
   */
  fatal(message: string, data?: LogData): void {
    this.log('fatal', message, data).catch(() => {})
  }
}

// 创建默认日志实例
const defaultLogger = new Logger('app')

// 导出默认实例和类
export default defaultLogger
export { Logger }

// 创建模块日志器的工厂函数
export function createLogger(module: string): Logger {
  return new Logger(module)
}

